#include "link_list.h"

// 单链表的创建
Link_list* init_link_list(void)
{
    // 1 创建 头节点的动态空间
    Link_list * list = (Link_list *)malloc(sizeof(Link_list));
    if (NULL == list)
    {
        printf("创建失败\n");
        return NULL;
    }
    
    list->next = NULL;

    return list;
}

//单向链表的遍历
void print_link_list(Link_list* list)
{
    //安全判断
    if (NULL == list)
    {
        printf("链表 为 NULL\n");
        return ;
    }
    if (NULL == list->next)
    {
        printf("表数据为空\n");
        return ;
    }
    
    Node * ptr = list->next;
    for (size_t i = 0; ptr != NULL; i++)
    {
        printf("姓名:%s 性别:%s 年龄:%d 账号:%d 密码:%d 等级:%d\n",
            ptr->data.name , ptr->data.sex , ptr->data.age , 
            ptr->data.password  , ptr->data.password , ptr->data.grade
            );
        ptr = ptr->next;
    }
    return ;
}

//单向链表的插入
void insert_node(Link_list* list, Elenemt_data data ,int pos)
{
    //安全判断
    if (NULL == list)
    {
        printf("表为NULL\n");
        return ;
    }
    
    Node * new_node = (Node *)malloc(sizeof(Node)); // 创建结点
    if (NULL == new_node)
    {
        printf("new_node 创建动态内存失败\n");
        return ;
    }
    
    new_node->data = data;
    //==========================头插==========================
    if (1 == pos)
    {
       //新节点的next 指向头节点的next
       new_node->next = list->next;
       //头节点next 指向新节点
       list->next = new_node;
       return ;
    }
    
    //==========================任意位置插入==========================
    Node * ptr = list->next;

    for (size_t i = 1; i < pos - 1 && NULL != ptr; i++)
    {
        ptr = ptr->next;
    }
    if (NULL == ptr)
    {
        printf("ptr 已经指向 NULL\n");
        free(new_node);
        return ;
    }

    //开始插入
    //新节点的next 指向 ptr 的next
    new_node->next = ptr->next;
    //ptr 的next 指向 新节点
    ptr->next = new_node;

    return ; 
    
}

//用户登录
Node * register_list(Link_list* list , int account , int password)
{   
        //安全判断
    if (NULL == list)
    {
        printf("表为NULL\n");
        return NULL;
    }
    if (NULL == list->next)
    {
        printf("表内无数据\n");
        return NULL;
    }
    Node * ptr = list->next;
    for (size_t i = 0; NULL != ptr ; i++)
    {
        if (ptr->data.account == account)
        {
            if (ptr->data.password == password)
            {
                return ptr;
            }
            ptr = ptr->next;
        }
        return NULL;
    }
        
}

//用户注册
void login_list(Link_list* list)
{
    Node * ptr = list->next;
    
}